﻿#pragma once

#include "../MonsterObject.h"
#include "../../MirDatabase/MonsterInfo.h"
#include "../MapObject.h"
#include "../../../Shared/Enums.h"
#include "../../../Shared/Data/Stat.h"
#include "../PlayerObject.h"
#include "../../../Shared/Packet.h"
#include <vector>

using namespace Server::MirDatabase;
using namespace Server::MirEnvir;
namespace S = ServerPackets;


namespace Server::MirObjects::Monsters
{
    class ZumaMonster : public MonsterObject
    {
    public:
        bool Stoned = true;
        bool AvoidFireWall = true;

    protected:
        bool getCanMove() const override;
        bool getCanAttack() const override;


        ZumaMonster(MonsterInfo *info);

    public:
        int Pushed(MapObject *pusher, MirDirection dir, int distance) override;

        void ApplyPoison(Poison *p, MapObject *Caster = nullptr, bool NoResist = false, bool ignoreDefence = true) override;
        Buff *AddBuff(BuffType type, MapObject *owner, int duration, Stats *stats, bool visible = false, bool infinite = false, bool stackable = false, bool refreshStats = true, std::vector<int> &values) override;

        bool IsFriendlyTarget(PlayerObject *ally) override;

    protected:
        void ProcessAI() override;

    public:
        void Wake();

        void WakeAll(int dist);
        bool IsAttackTarget(MonsterObject *attacker) override;
        bool IsAttackTarget(PlayerObject *attacker) override;

        bool Walk(MirDirection dir) override;

        Packet *GetInfo() override;
    };
}
